package Inteligencia;

import Naves.*;
import Juego.*;
import TDALista.*;
import TDAPila.*;
import Disparo.*;
import TDACola.*;

public class balasAI extends Thread{
	protected Gui universo;
	protected NavesUsuario jugador;
	public balasAI(Gui j){
		universo=j;
		jugador=universo.getUsuario();
		
	}
	
	public synchronized void run(){
		Queue<Position<Bala>> cargaraliadas=new ArrayQueue<Position<Bala>>();
		Queue<Position<Bala>> cargarenemigas=new ArrayQueue<Position<Bala>>();
		while(universo.getUsuario().EstaVivo()){
				try {Thread.sleep(5);
				} catch (InterruptedException e) {}
			
			for(Position<Bala> b:universo.getBalasAmigas()){ //para cada bala amiga si se salio de pantalla o si choco contra un enemigo 
																//la mete en la cola de elminacion sino la mueve
				if(b.element().getY()<0)
					cargaraliadas.enqueue(b);
				else
					b.element().Mover();
				
				for(Position<NavesEnemiga> e:universo.getListaEnemigos())
						if(b.element().choconave(e.element())){
							e.element().DisminuirVida();
							cargaraliadas.enqueue(b);
							break;
					}
							
				
							
			}
			while(!cargaraliadas.isEmpty()){ //borra todas las balas amigas que estan "muertas"
				try {
				universo.SacarBalaAmiga(cargaraliadas.dequeue()); 
				} catch (EmptyQueueException e){}
			}
					
			for(Position<Bala> b:universo.getBalasEnemigas()){ //igual a lo de arriva
					if(b.element().getLocation().getY()>universo.getHeight()){
						cargarenemigas.enqueue(b);}
					else{b.element().Mover();}
					
					if(b.element().choconave(jugador)){
						jugador.DisminuirVida();
						cargarenemigas.enqueue(b);
					}
						
			}
			while(!cargarenemigas.isEmpty()) //borra todas las balas enemigas que estan "muertas"
				try {
					universo.SacarBalaEnemiga(cargarenemigas.dequeue());
				} catch (EmptyQueueException e) {}
					
			
			
			
		}
	}
  }




